﻿#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    // 定义变量n：表示操作数序列的长度（即序列为1,2,...,n）
    int n;
    // 读取输入的n（范围1≤n≤18）
    scanf("%d", &n);

    // 定义变量存储卡特兰数：栈的输出序列总数恰好等于第n个卡特兰数
    // 用long类型是因为n=18时，结果约4.7亿，int类型（最大约21亿）虽够，但long更安全（避免溢出风险）
    // 初始值设为1：对应第0个卡特兰数C(0)=1（0个操作数时，只有1种空序列情况，作为递推起点）
    long catalan = 1;

    // 递推计算第n个卡特兰数：从C(0)逐步算到C(n)
    // 卡特兰数递推公式：C(k+1) = C(k) * (4k + 2) / (k + 2)
    // 循环k从0到n-1：共循环n次，依次得到C(1)、C(2)、...、C(n)
    for (int k = 0; k < n; k++) {
        // 先乘后除的顺序很关键：确保计算过程中结果始终是整数（卡特兰数是整数）
        // 若先除后乘，可能因小数截断导致结果错误（比如k=0时，(4*0+2)=2，(0+2)=2，2/2=1，1*1=1，正确）
        catalan = catalan * (4 * k + 2) / (k + 2);
    }

    // 输出第n个卡特兰数：即1~n通过栈操作能得到的输出序列总数
    printf("%ld\n", catalan);

    return 0;
}